home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / GMS / GMSDev / Source / C / Blitter / TripleBuffering.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-18  |  2.9 KB  |  95 lines

  1. /* Dice: 1> dcc -l0 -mD dpk.o TripleBuffering.c -o TripleBuffering
  2. **
  3. ** This version of the PixelList demo is triple buffered.
  4. */
  5.  
  6. #include <proto/dpkernel.h>
  7.  
  8. BYTE *ProgName      = "Pixel-List Demo (Triple Buffered)";
  9. BYTE *ProgAuthor    = "Paul Manias";
  10. BYTE *ProgDate      = "January 1998";
  11. BYTE *ProgCopyright = "DreamWorld Productions (c) 1996-1998.  Freely distributable.";
  12. BYTE *ProgShort     = "Demonstration of pixel lists.";
  13.  
  14. #define AMT_PIXELS 32
  15.  
  16. LONG Palette[] = {
  17.   PALETTE_ARRAY,32,
  18.   0x000000L,0x101010L,0x171717L,0x202020L,0x272727L,0x303030L,0x373737L,0x404040L,
  19.   0x474747L,0x505050L,0x575757L,0x606060L,0x676767L,0x707070L,0x777777L,0x808080L,
  20.   0x878787L,0x909090L,0x979797L,0xa0a0a0L,0xa7a7a7L,0xb0b0b0L,0xb7b7b7L,0xc0c0c0L,
  21.   0xc7c7c7L,0xd0d0d0L,0xd7d7d7L,0xe0e0e0L,0xe0e0e0L,0xf0f0f0L,0xf7f7f7L,0xffffffL
  22. };
  23.  
  24. struct PixelEntry Pixels[AMT_PIXELS] = {
  25.   {160,128,0},  {160,128,1},  {160,128,2},  {160,128,3},  {160,128,4},  {160,128,5},
  26.   {160,128,6},  {160,128,7},  {160,128,8},  {160,128,9},  {160,128,10}, {160,128,11},
  27.   {160,128,12}, {160,128,13}, {160,128,14}, {160,128,15}, {160,128,16}, {160,128,17},
  28.   {160,128,18}, {160,128,19}, {160,128,20}, {160,128,21}, {160,128,22}, {160,128,23},
  29.   {160,128,24}, {160,128,25}, {160,128,26}, {160,128,27}, {160,128,28}, {160,128,29},
  30.   {160,128,30}, {160,128,31}
  31. };
  32.  
  33. struct PixelList PixelList = {
  34.   AMT_PIXELS,
  35.   sizeof(struct PixelEntry),
  36.   Pixels
  37. };
  38.  
  39. struct GScreen *Screen;
  40.  
  41. /*=========================================================================*/
  42.  
  43. void main(void)
  44. {
  45.   WORD i;
  46.   struct JoyData *joy;
  47.  
  48.   if (Screen = InitTags(NULL,
  49.        TAGS_SCREEN,    NULL,
  50.        GSA_Attrib,     SCR_TPLBUFFER,
  51.          GSA_BitmapTags, NULL,
  52.          BMA_Palette,    Palette,
  53.          TAGEND,         NULL,
  54.        TAGEND)) {
  55.  
  56.     if (joy = Init(Get(ID_JOYDATA),NULL)) {
  57.        Show(Screen);
  58.  
  59.        do {
  60.  
  61.        ReadySwitch(Screen);
  62.  
  63.          Clear(Screen->Bitmap);
  64.  
  65.          for(i=0; i < (AMT_PIXELS-1); i++) {
  66.            Pixels[i].YCoord += 1;            /* Y Coord down 1 */
  67.            if ((Pixels[i].Colour -= 1) < 0)  /* Colour value down 1 */
  68.              Pixels[i].Colour = 1;
  69.          }
  70.  
  71.          Query(joy);
  72.          Pixels[AMT_PIXELS-1].XCoord += joy->XChange+(FastRandom(3)-1);
  73.          Pixels[AMT_PIXELS-1].YCoord += joy->YChange+(FastRandom(3)-1);
  74.  
  75.          if (Pixels[AMT_PIXELS-1].XCoord >= Screen->Width)  Pixels[AMT_PIXELS-1].XCoord = 0;
  76.          if (Pixels[AMT_PIXELS-1].YCoord >= Screen->Height) Pixels[AMT_PIXELS-1].YCoord = 0;
  77.          if (Pixels[AMT_PIXELS-1].XCoord < 0) Pixels[AMT_PIXELS-1].XCoord = Screen->Width-1;
  78.          if (Pixels[AMT_PIXELS-1].YCoord < 0) Pixels[AMT_PIXELS-1].YCoord = Screen->Height-1;
  79.  
  80.          for(i=0; i<(AMT_PIXELS-1); i++)
  81.            Pixels[i] = Pixels[i+1];
  82.  
  83.          DrawPixelList(Screen->Bitmap,&PixelList);
  84.  
  85.        WaitSwitch(Screen);
  86.  
  87.        } while (!(joy->Buttons & JD_LMB));
  88.  
  89.     Free(joy);
  90.     }
  91.   Free(Screen);
  92.   }
  93. }
  94.  
  95.